设备时序数据(例如传感器采集数据、设备监控数据和设备轨迹数据)具有极少更新、数据规模大等特点,需要使用时序模型存储,并且支持高并发写入、低成本海量数据存储以及灵活的查询分析能力。表格存储(Tablestore)的时序引擎针对时间序列数据的特点进行设计,提供高压缩比存储,可用于设备时序数据的存储与分析。本文以物模型数据上报Topic为例,介绍使用云产品流转功能将设备数据转发到表格存储(Tablestore)时序模型中的完整流程。
工作原理
云产品流转将设备的Topic消息转发到表格存储实例中的数据表中存储,使用表格存储的宽表引擎服务。
在上图中:
数据源:支持的Topic类型消息,请参见数据格式(非云网关产品和设备)、自定义Topic(MQTT云网关)、消息转发Topic(GB/T 32960云网关)、消息转发Topic(JT/T 808云网关)、消息转发Topic(SL 651云网关)。
数据目的:创建的表格存储实例中的数据表,用于接收设备数据。
解析器脚本:配置通过数据流转函数
writeTableStoreTs(destinationId, timeInUs, metricName, tags, fields, dataSource)
将Topic数据转发到表格存储的数据表。data
仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。函数详细说明,请参见函数列表。
使用限制
前提条件
已添加待转发的设备Topic数据源。例如:创建数据源DataSource,添加指定设备的物模型数据上报Topic。具体步骤,请参见添加待流转的数据源。
已创建表格存储实例和用于接收数据的数据表。表格存储使用方法,请参见表格存储时序模型文档。
重要企业版实例中,表格存储实例所在地域必须与企业版实例所在地域一致。
背景信息
表格存储时序模型:针对时间序列数据的特点进行设计的模型,可应用于物联网设备监控、设备采集数据、机器监控数据等场景,支持自动构建时序元数据索引、丰富的时序查询能力等功能。更多信息,请参见时序模型。
将物联网平台设备上报数据转发到表格存储中的详细说明,请参见物联网存储介绍。
本文示例中,写入时序表的数据如下:
fields:使用JSONPath方法,获取设备上报的物模型属性Temperature和Humidity的值,写入温度、湿度的时序数据。
timeInUs:使用函数
timestamp()
获取设备上报数据的当前时间戳(单位为毫秒)。timeInUs的时间单位为微秒,写入时间值为timestamp()*1000
。tags:写入标签
{"region": "cn-shanghai"}
。metricName:写入时间线度量名称
property
。dataSource:使用函数
deviceName()
获取设备名称,写入数据源标识。
创建数据目的
登录物联网平台控制台。
在实例概览页面,找到对应的实例,单击实例进入实例详情页面。
在左侧导航栏,选择 。
在云产品流转页面,单击右上角体验新版,进入新版功能页面。
说明如果您已执行过此操作,再次进入云产品流转页面,会直接进入新版功能页面。
单击数据目的页签,然后单击创建数据目的。
在创建数据目的对话框,输入数据目的名称,例如DataPurpose,按照以下参数说明,完成配置,然后单击确定。
配置并启动解析器
创建解析器,例如DataParser。具体操作,请参见步骤一:创建解析器。
在解析器详情页面,关联数据源。
在配置向导的数据源下,单击关联数据源。
在弹出的对话框中,单击数据源下拉列表,选择已创建的数据源DataSource,单击确定。
在解析器详情页面,关联数据目的。
单击配置向导的数据目的,然后单击数据目的列表右上方的关联数据目的。
在弹出的对话框中,单击数据目的下拉列表,选择已创建的数据目的DataPurpose,单击确定。
在数据目的列表,查看并保存数据目的ID,例如为1000。
后续解析脚本中,需使用此处的数据目的ID。
在解析器详情页面,单击解析器。
在脚本输入框,输入解析脚本。
解析脚本类似JavaScript语言,编辑脚本的语法参考JavaScript语法,详细编辑方法,请参见脚本语法。
函数参数说明,请参见函数列表。
//通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。 var data = payload("json"); //获取上报的属性值。 var h = data.items.Humidity.value; var t = data.items.Temperature.value; var datasource = deviceName(); var fields = {"temperature":t, "humidity":h}; var tags = {}; tags.put("region", "cn-shanghai"); var metricName = "property"; var timeInUs = timestamp()*1000; // 在writeTableStoreTS方法中,按时间线,将温湿度值写入对应的列。 writeTableStoreTs(1000, timeInUs, metricName, tags, fields, datasource);
您也可设置温度、湿度分别为度量名称,写入温湿度数据,函数表达式如下:
writeTableStoreTs(1000, [ { "timeInUs": timestamp() * 1000, "metricName": "温度", "tags":tags, "fields":{"temperature": t}, "dataSource": deviceName() }, { "timeInUs": timestamp() * 1000, "metricName": "湿度", "tags":tags, "fields":{"humidity": h}, "dataSource": deviceName() }, ]);
单击调试,根据页面提示,选择产品和设备,输入Topic和Payload数据,验证脚本可执行。
参数示例如下:
运行结果如下,表示脚本执行成功。
单击发布。
回到云产品流转页面的解析器页签,单击解析器DataParser对应的启动按钮,启动解析器。
后续操作
数据推送成功后,在表格存储接收数据的数据表的数据管理页签,查看是否成功接收到指定数据,请参见查询时序数据。
您可通过SQL查询功能,对表格存储中数据进行复杂的查询和高效的分析。具体操作,请参见使用SQL查询时序数据。
操作样例
相关文档
设备接入物联网平台上报数据的操作指导,请参见设备接入引导。
您可在实例详情页面,查看消息转发TPS可用资源,确保设备消息能正常转发到表格存储中。具体操作,请参见查看实例信息和运行数据。如果可用资源不足,可进行升配。具体内容,请参见升配。
使用表格存储的注意事项和常见问题,请参见表格存储的一般性问题。